/**
 * 
 */
package qy.jalgotrade.utils.resamplebase;

import java.time.ZonedDateTime;

/**
 * <pre>
 * 负责将特定 TimeRange 范围内的值进行汇总 (需指定初始时间), 例如: 将短 时间周期 的 Bar (Bars) 汇总得到长 时间周期 的 Bar (Bars):
 * addvalue(): 添加一个值;
 * getGrouped(): 返回汇总的值 (当前可汇总的全部, 调用时无需当前 TimeRange 已经结束);
 * </pre>
 * 
 * @author qy
 *
 */
public abstract class Grouper<T> {

	private ZonedDateTime __groupDateTime;

	/**
	 * 
	 * @param groupDateTime
	 */
	public Grouper(ZonedDateTime groupDateTime) {

		__groupDateTime = groupDateTime;
	}

	/**
	 * 
	 * @return
	 */
	public ZonedDateTime getDateTime() {

		return __groupDateTime;
	}

	/**
	 * Add a value to the group.
	 * 
	 * @param value
	 */
	public abstract void addValue(T value);

	/**
	 * Return the grouped value.
	 * 
	 * @return
	 * @throws Exception
	 */
	public abstract T getGrouped() throws Exception;
}
